package com.gp.service;

import java.util.List;

import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.IService;
import com.gp.model.dto.Count;
import com.gp.model.dto.OrderDetailWithGoodsDto;
import com.gp.model.dto.OrderGoodsVO;
import com.gp.model.dto.PayInfoVo;
import com.gp.model.entity.BaseOrder;
import com.gp.model.entity.BaseOrdergoods;
import com.gp.model.entity.SubmitInfoVo;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author 弓成龙
 * @since 2017-12-19
 */
public interface IBaseOrderService extends IService<BaseOrder> {
  
  /**
   * 根据用户id获取用户的所有的订单
   * @param page 查询条件
   * @param userid
   * @return List<BaseOrder>
   */
  Page<BaseOrder> getOrderList(Page page, Long uid);
  
  /**
   * 取消订单
   * @param id 该订单的id
   * @return boolean
   */
  boolean cancelOrder(Long id);
  
  /**
   * 提交订单
   * @param id 该订单的id
   * @return boolean
   */
  boolean addOrder(BaseOrder order);
  
  /**
   * 订单支付
   * @param payInfo 支付VO 
   * @return 是否支付成功
   */
  boolean pay(PayInfoVo payInfo);
  
  /**
   * 提交订单
   * @param id 该订单的id
   * @return boolean
   */
  boolean submit(SubmitInfoVo submitInfo);

  /**
   * 立即购买
   * @param dto 商品的信息
   * @return 是否购买成功
   */
 
  BaseOrdergoods imBuy(BaseOrdergoods dto);
  
  /**
   * 根据订单编码来检索信息-- 未提交的商品
   * @param orderCode
   * @return
   */
  List<OrderGoodsVO> selectByCode(String orderCode);
  
  /**
   * 验证密码的正确性
   * @param id
   * @param password
   * @return
   */
  boolean passwordConfirm(Long id, String password);
  
  /**
   * 根据订单的编码获取订单的详细信息
   * @param orderCode
   * @return
   */
  OrderDetailWithGoodsDto orderWithGoods(String orderCode);
  
  /** 
   * 根据订单编码来检索信息
   * @param orderCode
   * @return
   */
  List<OrderGoodsVO> getOrderByCodeSubmit(String orderCode);
  
  /**
   * 统计销量
   * @return
   */
  List<Count> countSale();
  /**
   * 统计增长量
   * @return
   */
  List<Count> countIncrease();
	
}
